import java.lang.Math;

public class DortluLinkedList
{
	int boyut;
	private byte dizi[][];
	private Eleman head = null;
	
	public void diziOlustur(int a)
	{
		boyut = a;
		this.dizi = new byte[boyut][boyut];
	}
	
	public void diziAta()
	{
		for(int i = 0; i < boyut; i++)
			for(int k = 0; k < boyut; k++)
				dizi[i][k] = (byte) (Math.random() * 99);		
	}
	
	public void diziAktar()
	{
		//kaktus saksinin uzerindedir.
		//surahi saksinin yanindadir.
		//gunes genelde ayni yerdedir, yavas yavas batar.
		
		Eleman kaktus = null, saksi = null, surahi = null, gunes = null;
		
		for(int i = 0; i < boyut; i++)
		{
			for(int k = 0; k < boyut; k++)
			{
				saksi = new Eleman();
				if(k == 0)
					gunes = saksi;					//sat�r�n ilk eleman� tan�m�

				if(i == 0 && k == 0)
					head = saksi;
				
				if(surahi != null)
				{
					if(k == 0)
					{
						surahi.right = null; 
						saksi.left = null;
						}
					else
					{
						surahi.right = saksi; 		//bi �nceki eleman�n right'�na �imdikini at�yor.
						saksi.left = surahi;		//�imdiki eleman�n left'ine �ncekini at�yor.
					}
				}
				surahi = saksi;						//right left i�lemleri bittikten sonra �nceki eleman� �imdikine at�yor.
													//gelecek d�ng� i�in �nceki eleman olmas�n� sa�l�yor.

				saksi.top = kaktus;				

				if(kaktus != null)
				{
					kaktus.down = saksi;
					kaktus = kaktus.right;
				}
					
				saksi.data = dizi[i][k];
				
			}
			kaktus = gunes;							//sat�rdaki ilk eleman� �nnceki sat�rdaki ilk eleman
													//olabilsin diye at�yor.
		}		
	}
	
	public void diziYazdir()
	{
		for(int i = 0; i < boyut; i++)
		{
			for(int k = 0; k < boyut; k++)
				System.out.printf("%2d ", dizi[i][k]);
			System.out.println();
		}
		System.out.println();
	}

	public void listeYazdirRightDown()
	{
		Eleman saksi = head, surahi = head;

		while(saksi != null)
		{
			while(saksi != null)
			{
				System.out.printf("%2d ", saksi.data);
				saksi = saksi.right;

			}
			System.out.println();
			surahi = surahi.down;
			saksi = surahi;
		}
		System.out.println();
	}

	public void listeYazdirLeftTop()
	{
		Eleman saksi = null, surahi = null, last = head;

		while(last.right != null)
		{
			last = last.right;
			last = last.down;
		}
		
		saksi = last;
		surahi = last;
		
		while(saksi != null)
		{
			while(saksi != null)
			{
				System.out.printf("%2d ", saksi.data);
				saksi = saksi.left;

			}
			System.out.println();
			surahi = surahi.top;
			saksi = surahi;
		}
	}

	public static void main(String[] args)
	{		
		DortluLinkedList liste = new DortluLinkedList();
		liste.diziOlustur(300);
		liste.diziAta();
		liste.diziYazdir();
		liste.diziAktar();
		liste.listeYazdirRightDown();
		liste.listeYazdirLeftTop();
	}

}

class Eleman
{
	Eleman right = null, left = null, top = null, down = null;
	public byte data;
}
